package com.leesche.zcsp.node.web.service;

import java.util.List;

import com.leesche.zcsp.node.web.model.SysRole;
import com.leesche.zcsp.node.web.model.SysRoleCriteria;
import com.leesche.zcsp.node.web.model.SysUser;
import com.leesche.zcsp.node.web.service.impl.data.read.QuerySysRoleCondition;
import com.leesche.zcsp.node.web.service.impl.data.read.SysRoleDto;
import com.leesche.zcsp.node.web.service.impl.data.read.SysUserDto;

/**
 * @Title: SysRoleService.java
 * @Description: TODO(系统角色Service接口)
 * @author 陈立勇
 * @date 2016年9月14日 下午11:10:22
 * @version V1.0
 */
public interface SysRoleService
		extends
		BaseService<SysRole, SysRoleCriteria, SysRoleDto, QuerySysRoleCondition, Long> {

	/**
	 * 
	 * @Title: findSysRoleParentTree 
	 * @Description: TODO(获取系统角色父级树节点) 
	 * @author Jerry Chen
	 * @date 2016年10月2日 下午9:00:04
	 * @return 系统角色父级树节点
	 */
	List<SysRole> findSysRoleParentTree();
	
	/**
	 * 
	 * @Title: findSysUserRole 
	 * @Description: TODO(根据用户NTYPE获取用户对应的角色) 
	 * @author Jerry Chen
	 * @date 2016年10月9日 上午10:43:42
	 * @param sysUsers 用户信息
	 * @return 角色集合
	 */
	List<SysRole> findSysUserRole(List<SysUser> sysUsers);
	
	/**
	 * 
	 * @Title: findDistributableSysUserRole 
	 * @Description: TODO(根据父级NTYPE获取可分配的用户角色信息列表) 
	 * @author Jerry Chen
	 * @date 2016年10月10日 下午8:43:42
	 * @param ntype 父级NTYPE
	 * @return 可分配的用户角色信息列表
	 */
	List<SysRole> findSysRoleByDifferentUser(SysUserDto sysUserDto);
	
	/**
	 * 
	 * @Title: countRoleTotal 
	 * @Description: TODO(查询系统角色总数量) 
	 * @author Jerry Chen
	 * @date 2016年10月12日 下午7:27:27
	 * @return 系统角色总数量
	 */
	int countRoleTotal();
	
	/**
	 * @Title: findChildRoleByBusinessUserID
	 * @Description: TODO( 获取商业用户下所有子账户角色 )
	 * @author Jerry 
	 * @date 2016-10-19 10:54:10
	 * @param userid 商业用户的ID
	 * @return 子账户角色
	 */
	List<SysRole> findChildRoleByBusinessUserID(Long userid);

	/**
	 * @Title:  findChildRolesByCondition(QuerySysRoleCondition condition)
	 * @Description: TODO( 根据查询条件获取子角色信息集合 )
	 * @author Jerry Chan
	 * @date 2017/1/5 17:16
	 * @return 子角色信息集合
	 */
	List<SysRole> findChildRolesByCondition(QuerySysRoleCondition condition);
}
